package com.frank.service;

/**
 * @Author: huweifeng
 * @Date: 2024/12/6
 * @Description:
 **/

import lombok.extern.slf4j.Slf4j;

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 测试ByteBuffer
 * 使用方法：
 * 1.向buffer中写入数据，例如channel.read(buffer)
 * 2.调用flip()切换至读模式
 * 3.从buffer读取数据，例如buffer.get()
 * 4.调用buffer.clear()或者compact()切换至写模式
 * 5.重复1~4步骤
 */
@Slf4j
public class ByteBufferTest {
    public static void main(String[] args) {
        // 读取test.txt的文本内容
        // 1.输入输出流
        try (FileChannel channel = new FileInputStream("test.txt").getChannel()){
            // 2.准备缓冲区
            ByteBuffer buffer = ByteBuffer.allocate(10);
            while (true) {
                // 3.channel读取数据，读到buffer中去
                int len = channel.read(buffer);
                log.info("读取的字节数：{}", len);
                if (len == -1) {
                    break;
                }
                // 4.切换buffer读模式，打印内容
                buffer.flip();
                while (buffer.hasRemaining()) {
                    byte b = buffer.get();
                    log.info("实际字节：{}", (char)b);
                }
                // 切换回写模式
                buffer.clear();
            }
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }
}
